package member.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import member.to.ActionForward;
/*
 * FrontController 
 * 모든 클라이언트의 요청을 받는 Controller
 *  - 모든 컨트롤러들이 가지는 공통 로직을 처리한다. 
 *  1. 공통로직 - 전처리 작업
 *  2. Controller 호출
 *  3. 공통로직 - 후처리 작업
 */
public class MemberController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1. 전처리 - 요청파라미터 한글처리 
		request.setCharacterEncoding("UTF-8");
		//2. Controller 호출 - 1. Controller 객체 조회. 2. Controller 객체의 handle() 호출
		String command = request.getParameter("command");
		Controller ctr = CommandControllerMapping.getController(command);
		//3. 후처리 - 응답할 View로 요청을 이동(ActionForward의 정보를 이용)
		try {
			ActionForward af = ctr.handle(request, response);
			if(af.isRedirect()){//리다이렉트 방식
				response.sendRedirect(af.getUrl());
			}else{//요청 디스패치 방식
				RequestDispatcher rdp = request.getRequestDispatcher(af.getUrl());
				rdp.forward(request, response);				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}



























